mysql - 数据库设计-对象继承

标签 mysql inheritance database-design

我正在考虑一种设计数据库的方法,但我想做得正确,我认为包括:

  • 数据库设计不应有任何冗余
  • 设计本身应该为什么是可能的、什么是不可能的设定限制
  • 数据库设计不应该需要任何业务逻辑来实现对象的持久化

这就是我现在所在的位置: 我脑子里有一个设计,想将其传输到 mysql 中(任何其他 DBMS 都可以,但我不认为这是问题)。 之后我想在数据库架构之上构建一个java应用程序。

我的问题看起来相当简单(为了简单起见,我删除了很多东西):

我有两个不同的对象/表:

  1. 船舶
    • ID
    • 姓名
    • 速度
  2. 武器
    • ID
    • 姓名
    • 损坏

我想做的是构建类似技术树的东西:

  • 如果你想 build “Y”舰,那么你必须首先研究“X”舰。
  • 如果你想使用武器“B”,那么你必须先研究武器“A”。
  • 如果你想使用武器“C”,那么你必须先研究武器“A”。

这很容易,但现在面临下一个限制:

  • 如果你想 build 飞船“Z”,那么你必须首先研究飞船“Y”和武器“B”和“武器“C”

这是树的直观表示:

Tree

为了表示一棵树,我只提出了一个解决方案:

创建一个名为“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/

相关文章:

mysql - 有效返回连接所有标签的对象

php - 带有或条件的Mysql案例

java - 需要类、接口(interface)或枚举

database - 您绝对需要数据库中的外键吗?

mysql - 如何为每个注册的新用户启动自动增量

MySQL单查询,父子关系跨表存储

mysql - 在 MySQL 中对 xml 路径使用函数

swift - 在 Swift 中覆盖 getter

C++ Virtual boost::any 继承

数据库设计 : accounting transaction table