【问题标题】:Did I overdesign my MySQL database (users/companies/products)?我是否过度设计了我的 MySQL 数据库(用户/公司/产品)?
【发布时间】:2011-03-19 08:41:55
【问题描述】:

我是数据库设计的新手, 请给我一些建议。

1 When should I use a composite index?

我不确定 index 是做什么的,但是 我知道我们应该把它放在它的时候 将像 WHERE 一样重载 已验证 = 1 并在搜索中 company.name = 某事。我说的对吗?

2MySQL indexes - how many are enough?

够了吗?

3Database Normalization

是不是刚刚好?

谢谢。

编辑*

规则。

  1. 每个用户(公司成员或所有者)都可以是 公司
  2. 每个公司都有一些用户。
  3. 有公司管理员(ceo,admins),有公司成员 (插入产品)
  4. 每个公司都可以有产品。

对于数字 3,我将在 users_company 添加一点 - 1 用于管理员 - 0 代表成员

【问题讨论】:

  • 问题是我们看到了您设计的表格,但不知道您将存储在其中的数据有什么规则。
  • 如果一家公司有多个“电话”、“地址”或“电子邮件”怎么办?可能想要创建一个新表 CompanyContact 并链接到一个公司,从而允许一个公司有多个联系人。好吧,这就是我的 2c
  • 那么公司的成员或所有者将是公司的多个联系人,怎么样?

标签: mysql database-design normalization


【解决方案1】:

不好。

示例:我想要我的产品的多张图片。请让我上传不止一张我的产品图片!

【讨论】:

  • 我猜数据库是否过度设计取决于规范,即它打算/要求做什么,而我们从问题中并不知道这一点。如果您只需要每个产品的一个大图像和一个小图像,那么为每个产品设计多个图像将是过度设计。所以这真的取决于应用程序的真正要求是什么。我猜这是一个值得向客户/老板提出的问题:)
  • 添加另一个表:images,具有 [product_id, img_small, img_large]。您将使用“product LEFT JOIN image ON (product.id=image.product_id)”加入。没有图像的产品将具有 img_small 和 img_large 的空值。具有多个图像的产品将列在具有不同 img_small 和 img_large 值的行中。
【解决方案2】:

我的唯一意见是,您可能只想考虑在您的 users_company 表中添加一个 mapping_id 列并制作 CID 和 UID 外键,并添加一个 UNIQUE 约束。

通过这种方式,您可以为该表中的记录拥有一个不同的主键,该主键不依赖于您的其他表的结构或您的任何业务逻辑。

【讨论】:

  • 我不认为这是必要的;将 CID 和 UID 作为主键如何过多地依赖于其他表的结构?添加另一个键不会在某种程度上使其反规范化吗?
  • 这在某种程度上是一个“选项”问题。我想这取决于项目的上下文以及 CID 和 UID 是否公开为“业务数据”。表的键应该是仅用于在表中键记录的内部数据。使用表格时,多字段键还可以产生更复杂的逻辑。
  • 嗯我很想这样做,但它们确实有限制( mapping_id 作为 int ),我是否必须为每个 PK 添加唯一的?还是PK和unique完全一样?
  • PK 根据定义是唯一的。如果您有其他想要保持唯一的字段,您也可以为这些字段添加唯一约束。
【解决方案3】:

至少对我来说看起来不错,正常化。

我注意到每个产品只能属于一家公司。如果这就是您的意图,那很好,否则您可以让产品有自己的 PID 并有一个 product_company 关系表,这将使多个公司销售一种特定产品。取决于谁管理我猜的产品。

我确实注意到用户表称为“用户”(复数),而其他表称为单数(“公司”、“产品”)。不过,这只是一件小事。

【讨论】:

  • 无论如何我现在遇到了问题,我该如何插入一个新公司?在插入 CID 之前我应该​​在哪里获取 CID?
猜你喜欢
  • 2020-04-29
  • 2014-10-22
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多