我正在考虑一种设计数据库的方法,但我想做得正确,我认为包括:
- 数据库设计不应有任何冗余
- 设计本身应该为什么是可能的、什么是不可能的设定限制
- 数据库设计不应该需要任何业务逻辑来实现对象的持久化
这就是我现在所在的位置: 我脑子里有一个设计,想将其传输到 mysql 中(任何其他 DBMS 都可以,但我不认为这是问题)。 之后我想在数据库架构之上构建一个java应用程序。
我的问题看起来相当简单(为了简单起见,我删除了很多东西):
我有两个不同的对象/表:
- 船舶
- ID
- 姓名
- 速度
- 武器
- ID
- 姓名
- 损坏
我想做的是构建类似技术树的东西:
- 如果你想 build “Y”舰,那么你必须首先研究“X”舰。
- 如果你想使用武器“B”,那么你必须先研究武器“A”。
- 如果你想使用武器“C”,那么你必须先研究武器“A”。
这很容易,但现在面临下一个限制:
- 如果你想 build 飞船“Z”,那么你必须首先研究飞船“Y”和武器“B”和“武器“C”
这是树的直观表示:
为了表示一棵树,我只提出了一个解决方案:
创建一个名为“entities”的新表,其中包含字段“id”和“table_name”;还创建一个 m2m 表,其中包含两个字段“id_entity”和“id_entity_pdemand”;表“ships”和“weapons”不再有真正的主键“id”,而是使用表“entities->id”的外键
- 好:可以表示完整的树
- 糟糕且丑陋:我需要业务逻辑首先创建一个实体,使用 ID,然后可以创建新的船只或武器
还有其他(更好的)方法可以做到这一点吗?
最佳答案
我认为您这里没有数据库设计问题,而是应用程序设计问题。
你所描述的逻辑,形式为“如果我满足以下条件,我只能做X......”在我看来,你需要一个状态机,而状态机的数据需求将是背后的驱动因素数据库架构。
有相当多的关于状态机的教育资源,我会寻找一些面向 Java= 的资源。
这是一个有趣的观点:http://www.skorks.com/2011/09/why-developers-never-use-state-machines/
关于mysql - 数据库设计-对象继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43956928/