表格标题可以是主键吗?

时间:2014-08-15 15:13:32

标签: sql database sqlite

我正在尝试将一些表改装到现有数据库。现有数据库有设备编号,我正在尝试添加有关该设备的更多信息的表格。理想情况下,我想将表格标题作为ID编号,并将其设置为该表格的PK,使设备列表中的ID编号为FK。 是否可以将表标题设置为PK?这是其中一个表的一个例子,我想把“E0111”作为PK。

CREATE TABLE E0111(
EQUIPMENT Varchar(200), 
MAINTENANCE varchar(200),
CYCLE varchar(200)
);

4 个答案:

答案 0 :(得分:1)

不,你不能这样做,因为primary key需要对你表的每一行都是唯一的。如果您“可以”使用表名作为主键,则每行都是相同的。

您应该使用表中的唯一列作为主键。

另外,我不知道如何使用SQLite或任何DBMS实现这一目标。

答案 1 :(得分:1)

在我回答关于表名作为主键的问题之前,我们需要退后一步。

每件设备都不应该有桌子。

您需要一张设备表,它可以将您的所有设备存储在一起。我假设您已经在现有数据库中。

希望它具有唯一标识符和设备编号。拥有单独的唯一标识符的原因是您的数据库服务器将其用于参照完整性和性能 - 这不是您应该在数据库内部以及数据库和您正在使用的任何应用程序之间的任何地方显示或使用的值。修改数据库。通常不应向用户显示。

设备编号是您熟悉的设备编号(即'E0111'),因为它向用户显示并在报告中标记等。两者具有不同的用途和需求,因此不应合并为单个值

我会试着看你的装备表是什么样的:

EquipmentId int                -- database Id - used for primary key
EquipmentName Varchar(200)     -- human readable 
EquipmentDescription Text
PurchaseDate DateTime
SerialNumber VarChar(50)
Model Varchar(200)
etc..

然后按照您的建议添加维护周期表,它将如下所示:

MaintenanceId int               -- database Id - used for primary key this time for the maintenance table.
EquipmentId int                 -- foreign key - references the equipment table
MaintenanceType Varchar(200)
DatePerformed DateTime
MaintenanceResults VarChar(200)
NextMaintenanceDate DateTime

要获得有关所有设备维护周期的结果,请在2个EquipmentIds上加入表格,即

SELECT EquipmentName, EquipmentDescription, SerialNumber, MaintenanceType DatePerformed
FROM Equipment
JOIN MaintenanceCycle ON Equipment.EquipmentId = Maintenance.EquipmentId
WHERE EquipmentName = 'E0111'

答案 2 :(得分:0)

您不能将表的名称作为主键。

所有主键都应该是唯一的,表列不是表名。这是priamry键的一般经验法则。互联网上有很多关于主键的资源。

这里只是一个: http://www.w3schools.com/sql/sql_primarykey.asp
http://database-programmer.blogspot.co.uk/2008/01/database-skills-sane-approach-to.html

答案 3 :(得分:0)

表格的名称应该描述其中的内容。将该数据表视为抽屉,您应在其中标注其中包含的内容。

从我的谦卑观点来看,设备的ID只能在有关设备上标记为。否则,在您的数据库中,表格Equipments应该以您拥有的每件设备的ID为准。

然后,如果您要保存其他与设备相关的信息,请添加另一个表格,其中包含应包含的信息类型,以及保存此信息的相关设备的ID。

例如,我们假设我们对您的设备进行维护计划。

<强>设备

-----------------------------------------------------
Id  |  Description  |  Location  |  Brand  |  Model
-----------------------------------------------------
1   | Printer/Copier|  1st Floor |  HP     |  PSC1000

<强>的维护

---------------------------------------------------------
Id  |  Description  |  Date |  EquipmentId  |  EmployeeId
---------------------------------------------------------

请注意,只有在需要知道谁进行了哪些维护以及何时进行维护时,EmployeeId列才会存在。

<强> MaintenanceCycles

--------------------------------------------
Id  |  Code  |  Description  |  EquipementId
--------------------------------------------
1   |    M   |  Monthly      |  1

这样,每个设备都可以有自己的循环,如果需要,每个设备甚至可以有多个循环。这使您可以灵活地进行进一步的更改。

相关问题