在一个类别中有效地存储多个键

时间:2012-04-03 11:21:25

标签: database-design

我正在为项目使用MySQL数据库和JSP。在我的项目中有哲学,技术,艺术,体育等类别。这些类别有多个值,如体育有曲棍球,板球,足球等。如果我使用数据库来存储这些值,将发生冗余。
例如运动板球,运动曲棍球等。

所以我的问题是,是否有任何有效的方法来存储这些值,以便当任何人进入板球时它与体育类别的板球比较?

2 个答案:

答案 0 :(得分:0)

听起来你有一个经典的many-to-many relationship

category可以包含多条value条记录,而value可以与多条category条记录相关联。

要对此进行建模,您需要创建三个表:categoryvalue和联结表category_value

<强>分类

  • ID
  • 名称
  • 等等...

<强>值

  • ID
  • 名称
  • 等等...

<强> Category_Value

  • 类别ID
  • VALUEID

答案 1 :(得分:0)

你的典型DBMS并不理解&#34;指针&#34;的概念,所以为了&#34;关联&#34;两个表,一个表中的某些值必须物理复制到另一个表。此外,无论何时创建索引,索引列中的数据副本都将存储在该索引中。

有很好的理由说明数据库中没有指针。最值得注意的是,DBMS可以在物理存储中移动数据,而不必担心挂起指针。仅这一点非常值得增加存储要求(使用指针而不是副本的假设DBMS),所以你只需要忍受它。


话虽如此,会对您的数据进行规范化Michael Fredrickson's answer已经涵盖了M:N关系,但如果这实际上是1:N(即一个值不能超过一个类别),你需要这样的东西:

enter image description here