English 中文(简体)
我的数据库的最佳设计是什么?
原标题:What would be an optimal design for my database?
  • 时间:2011-02-08 20:30:51
  •  标签:
  • sql
  • database

我需要为一个学校项目建立一个小数据库,我想得到一些建议。我的数据库将只包含少数物种和可以找到它们的森林;我需要知道物种名称、种群、IUCN评估,可以找到它的森林,以及它是否是该森林的特有种。

通常情况下,使用“物种”表、“森林”表和“森林_物种”表来处理多对多关系。然而,我知道我的数据库永远不需要那么复杂:只有三个森林,我会确保每个物种只生活在这三个森林中的一个。考虑到这一点,如果我这样设计我的数据库(只有一个包含所有信息的物种表)可以吗?

CREATE TABLE `Species` (
  `id` tinyint(3) NOT NULL auto_increment,
  `name` text NOT NULL,
  `population` int(7) NOT NULL,
  `conservation` enum( EX , EW , CR , EN , VU , NT , LC ) NOT NULL,
  `forest` enum( Amazon ,  Bialowieza ,  Madagascar ) NOT NULL,
  `endemic` tinyint(1) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

编辑:我还知道数据库永远不需要更新,这意味着我不需要投入时间和精力来维护它。再说一遍,我知道它永远不需要维护,就这样设计它可以吗?

最佳回答

如果你同意每个物种永远不能拥有一个以上的森林,那么这种方法很好。删除连接很好。

问题回答

在我看来,

If you are sure that you ll never have to add new forest and always you;ll have to choose among these three, than this is good solution because there is no joins between tables and the results will be retrieved faster. However because the database is too small (only two tables) this will not make any difference.

好吧,这真的取决于你在这里试图解决的领域问题。

如果你是上帝:)你可以确保每个物种只存在于一个森林中,那么我认为你的设计没有错。越简单越好。

但是,如果您将来要有存在于多个林中的物种添加新的林,那么您可能需要对其进行重构,使其具有forest表以及species表格和forest表格之间的连接表(多对多)。

如果你对自己的约束很满意,为什么

  • have an integer primary key
  • have no unique constraint on "name"

以下是我在你的描述中感到困惑的地方。

首先,你说,我的数据库将只包含少数物种和可以找到它们的森林,也就是说,你似乎允许一个物种栖息在多个森林中。但后来你说,我会确保每个物种只生活在这三个[森林]中的一个。现在,它似乎混淆了你的实际意图。

当这一点解决后,我将能够告诉你是否需要地方性列,因为如果你让每个物种都生活在一个森林中,这将自动使它们成为地方性物种,不是吗?

还有,回到你说的地方,我会确保,你的意思是说你不会把它作为数据库设计的一部分来实现吗?

我会好好做的。仅仅因为你知道需求永远不会改变,并不意味着它们不会改变!据你所知,当你完成项目时,可能会出现一个新的需求,而采取适当的方法可能会让一切变得不同!

对于相对较小的表,速度差可以忽略不计。

如果这是一个学校项目,那么,如果老师要研究你的解决方案,他们几乎肯定会希望看到一种“适当”的方法。或者至少可以解释一下为什么你没有按照正常的方式去做。

(*)在这种情况下,你可能真的知道需求不会蔓延,但在现实生活中的编码工作中,它们几乎总是这样!





相关问题
what is wrong with this mysql code

$db_user="root"; $db_host="localhost"; $db_password="root"; $db_name = "fayer"; $conn = mysqli_connect($db_host,$db_user,$db_password,$db_name) or die ("couldn t connect to server"); // perform query ...

Users asking for denormalized database

I am in the early stages of developing a database-driven system and the largest part of the system revolves around an inheritance type of relationship. There is a parent entity with about 10 columns ...

Easiest way to deal with sample data in Java web apps?

I m writing a Java web app in my free time to learn more about development. I m using the Stripes framework and eventually intend to use hibernate and MySQL For the moment, whilst creating the pages ...

join across databases with nhibernate

I am trying to join two tables that reside in two different databases. Every time, I try to join I get the following error: An association from the table xxx refers to an unmapped class. If the ...

How can I know if such value exists in database? (ADO.NET)

For example, I have a table, and there is a column named Tags . I want to know if value programming exists in this column. How can I do this in ADO.NET? I did this: OleDbCommand cmd = new ...

Convert date to string upon saving a doctrine record

I m trying to migrate one of my PHP projects to Doctrine. I ve never used it before so there are a few things I don t understand. In my current code, I have a class similar to this: class ...

热门标签