mysql - 关系数据库设计,一个元表多个表?

标签 mysql database database-design relational-database

我对数据库设计不太了解,最近我有一个项目, 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/

相关文章:

mysql - 如何获取用户之间的关系?

php - MySQL 通过 PHP 查询将 HTML 页面翻译成不同的语言。是好是坏?

mysql - MySQL 数据库中的最大表数

php - 内容数据库 - 可以存储 HTML 吗?

sql - 如何在Rails中联接三个表?

ruby-on-rails - 如何在 Rails 中存储多个可选字段?

sql - 如何设计映射同一实体的表?

mysql - SQL:选择一个表中不存在的键

php - 与主数据库同步

mysql - MySQL自动增量是如何工作的?