【发布时间】:2019-08-13 14:41:58
【问题描述】:
我正在创建一个数据库来存储机器上的测试结果。我提出的架构是合适的/最好的,还是我完全误解了如何构建数据库?
- 有不同类型的机器需要不同的测试。
- 这些测试使用“储备溶液”,这些溶液经过测试并注明日期,以确保它们适合使用。
- 有些机器有一个注射器,它也经过测试。
- 所有测试均在孔板中进行,因此我需要记录特定孔板中特定孔的值。
- 我需要记录谁进行了测试,所以我包含了一个用户表。
我当前的架构如下:
在 XML 中:
(我在这里使用查看器WWW SQL Designer。)
<?xml version="1.0" encoding="UTF-8"?>
<!-- SQL XML created by WWW SQL Designer, https://github.com/ondras/wwwsqldesigner/ -->
<!-- Active URL: https://ondras.zarovi.cz/sql/demo/ -->
<sql>
<datatypes db="mysql">
<group label="Numeric" color="rgb(238,238,170)">
<type label="Integer" length="0" sql="INTEGER" quote="" />
<type label="TINYINT" length="0" sql="TINYINT" quote="" />
<type label="SMALLINT" length="0" sql="SMALLINT" quote="" />
<type label="MEDIUMINT" length="0" sql="MEDIUMINT" quote="" />
<type label="INT" length="0" sql="INT" quote="" />
<type label="BIGINT" length="0" sql="BIGINT" quote="" />
<type label="Decimal" length="1" sql="DECIMAL" re="DEC" quote="" />
<type label="Single precision" length="0" sql="FLOAT" quote="" />
<type label="Double precision" length="0" sql="DOUBLE" re="DOUBLE" quote="" />
</group>
<group label="Character" color="rgb(255,200,200)">
<type label="Char" length="1" sql="CHAR" quote="'" />
<type label="Varchar" length="1" sql="VARCHAR" quote="'" />
<type label="Text" length="0" sql="MEDIUMTEXT" re="TEXT" quote="'" />
<type label="Binary" length="1" sql="BINARY" quote="'" />
<type label="Varbinary" length="1" sql="VARBINARY" quote="'" />
<type label="BLOB" length="0" sql="BLOB" re="BLOB" quote="'" />
</group>
<group label="Date & Time" color="rgb(200,255,200)">
<type label="Date" length="0" sql="DATE" quote="'" />
<type label="Time" length="0" sql="TIME" quote="'" />
<type label="Datetime" length="0" sql="DATETIME" quote="'" />
<type label="Year" length="0" sql="YEAR" quote="" />
<type label="Timestamp" length="0" sql="TIMESTAMP" quote="'" />
</group>
<group label="Miscellaneous" color="rgb(200,200,255)">
<type label="ENUM" length="1" sql="ENUM" quote="" />
<type label="SET" length="1" sql="SET" quote="" />
<type label="Bit" length="0" sql="bit" quote="" />
</group>
</datatypes>
<table x="863" y="197" name="tests">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="test_name" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="who" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
<relation table="users" row="id" />
</row>
<row name="results" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
<relation table="volumetric_test_results" row="id" />
</row>
<row name="overall_pass" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="166" y="300" name="test_names">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="test_name" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default>
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="1002" y="91" name="machines">
<row name="serial" null="1" autoincrement="1">
<datatype>MEDIUMTEXT</datatype>
<default>NULL</default>
</row>
<row name="part_number" null="1" autoincrement="0">
<datatype>MEDIUMTEXT</datatype>
<default>NULL</default>
<relation table="machine_types" row="part_number" />
</row>
<row name="syringe" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
<relation table="syringes" row="serial_number" />
</row>
<row name="tests_undertaken" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
<relation table="tests" row="id" />
</row>
<key type="PRIMARY" name="">
<part>serial</part>
</key>
</table>
<table x="1171" y="17" name="machine_types">
<row name="part_number" null="1" autoincrement="1">
<datatype>MEDIUMTEXT</datatype>
<default>NULL</default>
</row>
<row name="description" null="1" autoincrement="0">
<datatype>MEDIUMTEXT</datatype>
<default>NULL</default>
</row>
<key type="PRIMARY" name="">
<part>part_number</part>
</key>
</table>
<table x="600" y="302" name="volumetric_test_results">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="plate" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
<relation table="plates" row="id" />
</row>
<row name="criteria" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
<relation table="volumetric_test_criteria" row="id" />
</row>
<row name="pass" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="stock_solution" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
<relation table="stock_solutions" row="id" />
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="363" y="294" name="volumetric_test_criteria">
<row name="id" null="0" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="test_name" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
<relation table="test_names" row="id" />
</row>
<row name="feature" null="1" autoincrement="0">
<datatype>MEDIUMTEXT</datatype>
<default>NULL</default>
</row>
<row name="criterion" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="volume" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="unit" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default>
</row>
<row name="active" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="use_wells" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default>
</row>
<row name="required_to_pass" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="1220" y="435" name="wells">
<row name="plate" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
<relation table="plates" row="id" />
</row>
<row name="well" null="0" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="absorbance" null="1" autoincrement="0">
<datatype>DOUBLE</datatype>
<default>NULL</default>
</row>
<key type="PRIMARY" name="" />
</table>
<table x="1217" y="285" name="plates">
<row name="id" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="datetime" null="1" autoincrement="0">
<datatype>DATETIME</datatype>
<default>NULL</default>
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="623" y="616" name="stock_solutions">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="plate" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
<relation table="plates" row="id" />
</row>
<row name="criteria" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
<relation table="stock_criteria" row="id" />
</row>
<row name="who" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
<relation table="users" row="id" />
</row>
<row name="pass" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="398" y="603" name="stock_criteria">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="mean_square_error" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="slope" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="intercept" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="use_wells" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default>
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="836" y="47" name="syringes">
<row name="serial_number" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="tests_undertaken" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
<relation table="syringe_tests" row="id" />
</row>
<key type="PRIMARY" name="">
<part>serial_number</part>
</key>
</table>
<table x="617" y="105" name="syringe_tests">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="criteria" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
<relation table="syringe_test_criteria" row="id" />
</row>
<row name="who" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
<relation table="users" row="id" />
</row>
<row name="pass" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="plate" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
<relation table="plates" row="id" />
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="365" y="78" name="syringe_test_criteria">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="volume" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="unit" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="use_wells" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default>
</row>
<row name="feature" null="1" autoincrement="0">
<datatype>MEDIUMTEXT</datatype>
<default>NULL</default>
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="711" y="771" name="users">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="first_name" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default>
</row>
<row name="surname" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default>
</row>
<row name="email" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default>
</row>
<row name="password_hash" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default>
</row>
<row name="role" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default>
<relation table="roles" row="id" />
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="858" y="823" name="roles">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default>
</row>
<row name="role" null="1" autoincrement="0">
<datatype>VARCHAR</datatype>
<default>NULL</default>
</row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
</sql>
【问题讨论】:
-
嗨,您上面详细介绍的是系统实体关系图,它详细说明了您所支持的系统中的实体如何相互关联。与其问一个非常笼统的问题,不如阅读关系和规范化以及这将如何最适合您的系统。毕竟只有你会知道什么是最合适的,什么时候规范化,什么时候不规范化等等。
标签: sql database database-schema