Scalable Template
/* This is a super-powerful database template I made, and have used it for many things. It is extremely scalable and in 5th normal form. :) */
DROP DATABASE IF EXISTS `objects`;
CREATE DATABASE `objects`;
USE `objects`;
/* Table of object types. */
CREATE TABLE IF NOT EXISTS `object_type`(
`ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`Description` VARCHAR(255) NOT NULL
);
/* Table of objects. */
CREATE TABLE IF NOT EXISTS `object`(
`ObjectTypeID` INT NOT NULL,
`ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`Description` VARCHAR(255),
FOREIGN KEY (`ObjectTypeID`) REFERENCES `object_type`(`ID`)
);
/* Table of property types. */
CREATE TABLE IF NOT EXISTS `property_type`(
`ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`Description` VARCHAR(255) NOT NULL
);
/* Table of properties. */
CREATE TABLE IF NOT EXISTS `property`(
`ObjectID` INT NOT NULL,
`PropertyTypeID` INT NOT NULL,
`ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`Value` LONGTEXT NOT NULL,
`Description` VARCHAR(255),
UNIQUE (`ObjectID`, `PropertyTypeID`, `Value`(255)),
FOREIGN KEY (`ObjectID`) REFERENCES `object`(`ID`),
FOREIGN KEY (`PropertyTypeID`) REFERENCES `property_type`(`ID`)
);
/* Example of an object and its properties. */
INSERT INTO `object_type` SET `ID` = 1, `Description` = 'Employee';
INSERT INTO `object` SET `ObjectTypeID` = 1, `ID` = 1, `Description` = 'Jon Hawks';
INSERT INTO `property_type` SET `ID` = 1, `Description` = 'Eye Color';
INSERT INTO `property_type` SET `ID` = 2, `Description` = 'Hair Color';
INSERT INTO `property` SET `ObjectID` = 1, `PropertyTypeID` = 1, `ID` = 1, `Value` = 'Blue';
INSERT INTO `property` SET `ObjectID` = 1, `PropertyTypeID` = 2, `ID` = 2, `Value` = 'Blonde';