ファイル(画像、PDFなど)を保存する次のテーブルがあります。
CREATE TABLE `tbl_file` (
`id` INT(10),
`size` FLOAT,
`name` VARCHAR(45),
`type` VARCHAR(16),
`content` BLOB,
`date_time` TIMESTAMP,
PRIMARY KEY (`id`)
)
ファイル (tbl_order & tbl_payment) を持つテーブルは多数ありますが、ファイル (tbl_file) を格納するために 1 つのテーブルのみを使用したいと考えています。ただし、一部のテーブルでは、各行に複数のファイルが含まれる場合があります。
たとえば、1 つの注文 (請求書、PO、BL、契約書) に対して複数のファイルが存在し、支払いごとに複数のファイルが存在する場合などがあります。
そこで、複数のファイルを持つテーブルごとに次のジャンクション テーブルを作成しました (外部キー コードは含めませんでした)。
CREATE TABLE `tbl_order_file` (
`order_id` INT(10),
`file_id` INT(10),
PRIMARY KEY (`order_id`, `file_id`),
)
と
CREATE TABLE `tbl_payment_file` (
`payment_id` INT(10),
`file_id` INT(10),
PRIMARY KEY (`payment_id`, `file_id`),
)
ここでの問題は、1 つのファイルを両方のテーブルに関連付けることができることです。問題ではなく利点かもしれませんが、これを行うためのより良い方法があるかどうか、またはファイルを制限して 1 つのテーブルでのみ参照されるようにする方法を見つけたいと思います。
MySQLをinnodbエンジンで使用しています。