我需要一些关于我的数据库设计的想法。我有大约5个字段用于用户的基本信息,例如姓名,电子邮件,性别等。 然后,我想要有大约5个字段用于选择信息,例如信使身份证。 和1个可选的文本字段以获取关于用户的信息。 我应该创建只有一个tabel与所有字段都在一起,或者我应该为5个可选字段创建单独的表,以避免冗余等? 谢谢。关于数据库设计
关于数据库设计
回答
我会坚持只有一张桌子。
添加另一个表格只会使更复杂,你只会获得非常小的磁盘空间。
,我实在看不出如何能以任何方式冗余;)
我认为你应该肯定有一个表坚持下去。由于所有信息都与用户相关,并且不反映任何其他逻辑模型(如文章,博客文章等),因此即使它们是可选的,您也可以安全地将所有内容保存在一个位置。
我只能创建一个表的其他字段。但不包含5个字段,而是与基表和键/值信息的外键关系。喜欢的东西:
create table users (
user_id integer,
name varchar(200),
-- the rest of the fields
)
create table users_additional_info (
user_id integer references users(user_id) not null,
ai_type varchar(10) not null, -- type of additional info: messenger, extra email
ai_value varchar(200) not null
)
最终,你可能要一个additional_info
表,以获取额外的信息持有可能的有效值:信使,额外电子邮件,等等。但这取决于你。我不打扰。
这是什么过分复杂的设计,以存储5个领域的一个用户? – krtek 2011-03-06 11:46:01
@Krket:我猜想可扩展性... – 2011-03-06 11:55:41
这取决于有多少人会拥有所有可选信息,以及您是否计划添加更多字段。如果您认为将来会添加更多字段,则可以使用EAV模式将该信息移动到元表中:http://en.wikipedia.org/wiki/Entity-attribute-value_model
因此,如果您不确定,那么您的表格会类似于
User : id, name, email, gender, field1, field2
User_Meta : id, user_id, attribute, value
在您的中继台使用user_ID的领域,你可以将其链接到你的用户表,只要你想添加尽可能多的稀疏使用可选字段。
注意:只有在您有许多稀疏填充的可选字段时才会付出代价。否则它在一个字段
我会建议使用一个单一的表。数据库非常擅长优化空列的空间。
将此表拆分为两个或多个表是垂直分区的一个示例,在这种情况下可能会出现过早优化的情况。但是,当您只有一些列需要查询时,例如,这种技术会很有用。大的二进制blob。
- 1. 关于设计数据库
- 2. 关于数据库表格设计
- 3. 关系数据库设计
- 4. 关于数据库关系的SOA设计原则
- 5. 关于MySQL关系数据库设计的快速提示
- 6. 关系数据库设计 - “循环”图
- 7. 关系数据库设计周期
- 8. 关系数据库设计(MySQL的)
- 9. 1-M关系数据库设计
- 10. 关系数据库设计(MySQL的)
- 11. MySQL数据库设计 - 关系表
- 12. 数据库设计1对1关系
- 13. 关联数据库设计中的3NF
- 14. MySQL关系数据库设计
- 15. 关系数据库设计用MySQL,
- 16. 数据库架构设计的关系
- 17. 数据库设计:OR关系
- 18. 数据库表关系的设计
- 19. 数据库设计 - 关于效率的问题(和一般设计质量)
- 20. 关于Wordpress数据库设计的思考
- 21. 关于层次化MySQL数据库设计的建议
- 22. 关系数据库设计用于存储每周出勤
- 23. 关于拖欠利息的数据库设计
- 24. 需要关于设计数据库的帮助
- 25. 请求关于数据库设计的反馈
- 26. 关于Java中数据库设计方法的问题
- 27. 关系数据库设计:用于报表的重复属性
- 28. 关于合适的数据库设计和实施与C#
- 29. 数据库设计:Discrimator与分离表关于约束
- 30. 关于数据库设计技巧的问题
你在谈论数据库规范化和正常形式。对此,有很多话题。 – Darbio 2011-03-06 11:39:25
相关:http://stackoverflow.com/questions/1086896/db-design-members-table-separate-or-all-in-one-table – 2011-03-06 11:41:05