students
-------
name
age
email
colA
colB
colC
teachers
-------
name
age
email
colD
colE
parents
-------
name
age
email
colF
colG
colH
colI
对于上面的设计,我应该创建一个带有名为user_type
的附加列的表还是创建3个表?
将要插入数百万个数据。如果我只使用一张桌子,我会担心性能问题。
我需要mysql专家的建议。
请指教。 感谢。
答案 0 :(得分:1)
如果我要设计一张桌子,我宁愿在两张桌子上做。
用户类型
- TypeID (Primary Key)
- TypeDescription
用户
- UserID (Primary Key)
- TypeID (Foreign Key)
- ColA (nullable)
- ColB (nullable)
- ColC (nullable)
- ColD (nullable)
- ColE (nullable)
- ColF (nullable)
- ColG (nullable)
- ColH (nullable)
- ColI (nullable)
答案 1 :(得分:1)
我会创建一个用户表和一个单独的用户类型表,通过外键链接。任何一半不错的DBMS的性能都会很好,实际上可能会稍微加入3个单独的表中。此外,搜索这些表格的效果会更差,因为您的查询中必须union
。
此设计假定所有用户都具有与之关联的相同元数据。如果将不同的用户视为不同的实体并因此具有不同的元数据,则将它们存储在3个不同的表中将更合乎逻辑。但是,您仍然可以选择将它们放在一个包含每个用户的所有元数据列的表中,并且性能会很好。
答案 2 :(得分:1)
您基本上拥有要在关系数据库中建模的用户继承结构。查看以下有关不同方法的文章:
关于此主题的stackoverflow有很多问题和答案。
答案 3 :(得分:1)
我希望尽可能避免使用可空列,所以我会这样做:
persons (or people if you prefer)
-------
name
age
email
students
-------
person_id
colA
colB
colC
teachers
-------
person_id
colD
colE
parents
-------
person_id
colF
colG
colH
colI