我对数据库设计不太了解,最近我有一个项目, promise 需要一个巨大的数据库,我很困惑设计标准数据库结构(mysql)的最佳方法是什么。
例如,假设我们有 3 个表:用户、商店、产品 其中每一个(用户、商店、产品)可能有一个或多个详细信息,例如社交页面链接(对于商店)、电话号码(对于用户)、地址(对于商店和用户)、颜色\ Material (对于产品)等...
我应该只创建一个元表并在其中存储所有详细信息,还是应该为每个表创建单独的元表?(user_meta、shop_meta、product_meta)。 哪一种是更好的方法?
如有任何意见和建议,我们将不胜感激。
编辑
根据 Branko Dimitrijevic 先生的说法,每个表都应该有自己的元表。
我的问题是用户可能有多种类型的详细信息,例如:社交页面 url、用户地址、用户角色等...
这样设计数据库可以吗:
**Table: USERS**
userId | username | email | pass
**Table: USERS_META**
userId | metaType | metaValue
metaType 将是用户可以拥有的不同类型的详细信息,例如地址、instagram 页面、facebook 页面等...
例如 USERS_META 表中的记录如下:
userId | metaType | metaValue
---------------------------------------------------
2 | address | some address for user home
---------------------------------------------------
2 | role | 1(id of the role)
---------------------------------------------------
2 | instagram | instagram.com/userpage
---------------------------------------------------
3 | address | some address for user 3 home
---------------------------------------------------
3 | facebook | facebook.com/userpage
---------------------------------------------------
3 | role | 2(id of the role)
---------------------------------------------------
2 | age | 18
---------------------------------------------------
3 | age | 19
现在如果我想要用户 2 的地址:
SELECT metaValue FROM USERS_META WHERE userId=2 AND metaType='adress'
如果我想要用户社交页面链接:
$array=array('facebook','instagram','telegram','etc');
SELECT metaValue FROM USERS_META WHERE userId=2 AND metaType IN($array)
这是一个好方法还是我应该为每个元创建单独的表(USER_ADDRESSES、USER_SOCIAL、USER_AGE 等...)?
最佳答案
简而言之:您不应该“合并”多个表。
即使它们碰巧具有相同的字段,它们几乎肯定没有相同的约束(例如从其他表指向它们的外键)。
关于mysql - 关系数据库设计,一个元表多个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46540652/