项目开发中 如何设计数据字典?

2019-03-25 13:33|来源: 网路

比如:people实体有性别(男女)、国际(汉族、回族、满族、藏族...)、学历(小学、中学、高中、本科...)等等属性,这些属性都有相似处,前台展现时都以下拉框实现,如何将这些数据作为数据字典设计,而不是写死的呢?

如果用数据字典directionary表存取这些值 那么需要和实体类即people表关联吗?也就说people表的sex存取的是directionary表的Id吗?

问题补充:
AngelAndAngel 写道
  对这个方面 你用一个表来做 可以实现 但是在项目中运用的时候 不太好,特别是复杂的表单。还有数据字典其实面临的最大问题是查询匹配问题,并且得非常灵活,比如你页面不光是要读取,还得判断,还得当作条件来查询其他数据库,还得转化等等,这些都是非常重要的。
  我现在是用的两个表 ConstType和Const,目前已经实现了自动生成下拉表,缓存读取,和方便灵活的查询策略,算是比较完善的数据字典了。假如你需要 我们可以聊聊。


如何实现自动生成下拉列表啊 还有这个需要缓存吗?是在项目启动的时候放到内存中?

问题补充:
liyahui2011 写道
数据字典其实不用这么麻烦用多张表的,用一张表就够了。directionary表
只是加一个parent_id字段,增加其内连接关系。通过这个id就可以找到它属于哪一个类别了

前台的话用Map结构取值。
Map<String,Map<String,Object>>
比如存放学历

Map<'103',<'001','小学'>
Map<'103',<'002','中学'>
Map<'103',<'003','高中'>
Map<'103',<'004','本科'>

很方便的

parent_id是指Map<'103',<'001','小学'>中的103吗?
页面展现用sql获取值后瓶装为Map<String,Map<String,Object>>

这样的话 people表存取的时候还是要和directionary建立外键关系
我不是很确定 正常是表需要和数据字典表建立关系吗?如果不建立的话如何存取值呢?

问题补充:由于刚开始着手思考数据字典这方面的实现,所以很多性能相关的考虑肯定不全面,缓存这方面知识没整过,感觉是系统启动时加载数据到map中,然后需要用的时间就用,关键是怎么用呢?map是静态的,变更后重新读取数据库如何更新map

问题补充:
AngelAndAngel 写道
还有 假如你不想维护数据那种字典,也可以做成js的数据字典,这方面我也有一些实现。至于生成下拉列表框等 表单元素 很好解决的,用jquery,假如你不太明白,可以及时站内我。

如何与您联系哈 qq邮箱什么的

问题补充:缓存肯定是要用的 就是没做过 可能需要花功夫  很感谢你的指导哈哈

问题补充:后期如果有什么不明白的 还请不厌打扰哈

相关问答

更多
  • 制作数据字典工具的sql文件必须Navicat或MySQLFront或Toad导出,我使用的是sqlyog,因此格式和这个工具有冲突,导致经常使用有问题,建议使用的话采用Navicat导出表结构,这样就不会存在sql格式不兼容的问题。 比较哦可惜的是不能自动生成每个表的功能以及索引情况。先上一张图展示一下效果: 对于MySQL, 总共三步操作: 一、点DataDictionaryTool版本号.bat打开图形界面。 二、MySQL->载入sql脚本文件 三、MySQL->生成数据字典 对于Oracle,也是 ...
  • 哎,库表要是可以动就好了..头不让动啊,而且那边的中文存储有问题.对了,你们有没有用过latin编码的mysql库?为什么我用iso-8859-1转utf8形式的jdbc连接会有乱码呢,就是出来一些中文,还有好多问号
  • 您可能可以按照以下方式进行简化: QY =['2013_1', '2013_2', '2013_3', '2013_4'] df = pd.DataFrame() for item in QY: df = pd.concat([df, H_cltn[item]['A'].describe()], axis=1) ## possibly axis=0 You might be able to simplify along these lines: QY =['2013_1', '2013_2', ' ...
  • 如果我理解正确,您指的是在PgAdminIII中右键单击表格并选择报告>数据字典报告的功能? 我不知道PgAdminIII有什么方法可以做到这一点。 您可以考虑使用SchemaSpy等其他工具。 另一个选项(由@kgrittn提到)是使用带有\ H标志的psql \ d来生成html输出。 我的解决方案 (因为SchemaSpy没有做我需要的东西,我需要为Postgres和Oracle提供相同的输出)是使用perl,DBD :: Pg和Template :: Toolkit自己动手。 更新:添加了GitHu ...
  • 我认为如果您做出初步的架构决策而不是重构现有的应用程序,那么您的问题会更有趣。 我没有在你的问题中看到一个断言,表明ORM中的设计会解决这个问题; 但它会创造几个。 如果两个主要的利益相关方群体(业主和其他开发商对更传统的设计更为舒适,那么在我看来,ORM将向上游游泳。 我可以想象,一旦查询缓慢或事务锁定问题开始出现,就会与ORM相关联(可能是不值得的)认可。 更不用说对开发进度的影响了。 为什么要创建一个未量化的风险因素? I think your question would be more inter ...
  • 在我的数据库项目中,我有Field类和Record类。 Field类提供从结果集中提取数据成员以及检索字段名称的功能。 class Field { public: virtual std::string get_field_name(void) const = 0; virtual void load_from_result_set(const Result_Set& rs, unsigned int col ...
  • 您可以先查看一个字典表,例如ALL_INDEXES,然后尝试这样的事情: SELECT TABLE_NAME FROM USER_INDEXES GROUP BY TABLE_NAME HAVING COUNT(*) > 2; 我没有尝试过代码,或者详细阅读文档以查看是否有可能出现两次事情的情况,但它应该让你走上正轨。 You can start by looking at a dictionary table such as ALL_INDEXES and trying something ...
  • 尝试这个代码,我已经清理它并添加注释,因为它很难处理。 static void Main(string[] args) { // Initalize the loop iterator int i = 0; // Initalize a list of country data country[] newCountry = new country[30]; // Initialize a list of ...
  • 关于DDs,我的一般意见是“如果没有破坏就不要修复它”。 大多数人只需使用默认的DD并进行足够的更改以适应目标场地。 你可以进去并删除其他所有东西,但我认为这不会很好地利用几个工时(如果你不犯任何错误就没有明显的危害)。 DD文件格式很简单,并且DD很少改变,因此将它们留在其中不会产生可维护性问题。 听起来像你的开发人员......让我们说一个“注重细节的个性”。 给他一些新的工作,他会忘记这一点。 Regarding DDs, my general opinion is "if it ain't brok ...
  • 首先,像任何科目一样学习需要时间,所以不要急于求成,否则你会迷惑自己。 您看到的输出语法是一个树,它采用一系列列表和嵌入列表的形式。 它可能会提醒您流行的LISP的语法,例如Scheme或Clojure 。 (TOP(VP(VB Shutdown) (NP(DT all) (JJ active) (NNS devices)))) 单词/列表左侧的标签是所谓的POS( 词性 )标签,表示单词所属的语法类别,基本上是单词类别消歧。 POS标签仍然是自然语言处理的一个非常困难的研究领域,作为F1 ...