Jav*_*aSa 2 mysql database-design
当我想将表 A 的列的值限制为仅从表 B 的相关列中的一组可选值中获取时,我遇到了麻烦。
问题是表 B 的相关列不是外键。如果我这样做,我想我可以为不同的列值多次使用相同值的正确状态将是不可能的 - 这不是我寻找的行为。
那么可以做什么呢?
所以table2.columnB
必须包含一个值 fromtable1.columnA
但可能有重复的值,table1.columnA
所以你不能声明它是唯一的?显然 InnoDB 确实允许这样做,请参阅/sf/ask/165351441/进行讨论,但标准 SQL(因此大多数数据库)明确没有(它呈现一些操作,比如ON {DELETE|UPDATE} CASCADE
可能不一致),所以我会避免这个选项。
如果没有有效的值的一组固定的,你可以让他们在自己的表在列定义的唯一/主键,那么这两个table2.columnB
和 table1.columnA
可外键引用新TABLE.COLUMN。
一个不太干净的选择是编写触发器来手动维护外键,如http://cvuorinen.net/2013/05/validating-data-with-triggers-in-mysql/中提到的,你应该很容易找到通过您首选的搜索引擎。您需要小心地以逻辑和有效的方式考虑所有可能性,因此我会推荐“新实体类型和外键”方法 - 这将不太容易出错,可能更有效,并且无论如何可能会更好地对您的数据进行建模(也许这些列表示的属性本身应该是实体)。