3

私は3つのテーブルを持っています:

property

`id` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` MEDIUMINT(8) UNSIGNED NOT NULL,
`title` VARCHAR(100) NOT NULL,
`alias_title` VARCHAR(255) NOT NULL,
`primary_category` TINYINT(3) UNSIGNED NOT NULL,
`second_category` TINYINT(3) UNSIGNED NOT NULL,
`reference_number` VARCHAR(100) NOT NULL,
`description` VARCHAR(10000) NOT NULL,
`no_of_bedrooms` TINYINT(2) UNSIGNED NOT NULL,
`no_of_bathrooms` TINYINT(2) UNSIGNED NOT NULL

property Rental

`property_id` MEDIUMINT(8) UNSIGNED NOT NULL,
`minimum_rental_months` TINYINT(2) UNSIGNED NOT NULL,
`minimum_rental_years` TINYINT(2) UNSIGNED NOT NULL,
`maximum_rental_months` TINYINT(2) UNSIGNED NOT NULL,
`maximum_rental_years` TINYINT(2) UNSIGNED NOT NULL,
`available_from` DATE NOT NULL,
`available_to` DATE NOT NULL,
`type_of_letting` TINYINT(1) UNSIGNED NOT NULL,
`price` DECIMAL(7,2) UNSIGNED NOT NULL,
`deposit` DECIMAL(7,2) UNSIGNED NOT NULL,
`additionals_included_with_rent` VARCHAR(500) NOT NULL

property Sales

`property_id` MEDIUMINT(8) UNSIGNED NOT NULL,
`price` DECIMAL(10,2) UNSIGNED NOT NULL

状況は、プロパティが賃貸物件または販売物件のいずれかである可能性があるということです。それは他の1つである必要があります。property_idは、販売と賃貸の両方で不動産にとって異質です。ただし、この構造を使用すると、ユーザーは事実上、賃貸または販売に属さないプロパティを作成できます。プロパティを販売テーブルまたは賃貸テーブルのいずれかに配置する必要があるように、いくつかの制約を設定する必要があります。

次に、すべてのプロパティと関連する詳細を見つけるためにクエリを実行する必要があります。

この場合、物件が賃貸または販売のいずれかに属していることを確認するための最善の方法を教えてもらえますか。

4

1 に答える 1

0

あなたが説明することは、鶏が先か卵が先かという問題を引き起こすでしょう。property_id外部キーでは一般エントリが最初に存在する必要があるため、最初に適切な「サブテーブル」に挿入することはできません。ただし、少なくともここで求めている制約を表現できる場合は、最初に一般テーブルに挿入することもできません。また、2つのテーブルに同時に挿入することはできないため、整合性チェックをしばらく無効にしない限り、データをまったく挿入できません。これは、非常に悪いスタイルだと思います。

データベースの制約レベルでは、これに対する明確な解決策は見当たりません。したがって、アプリケーションレベルで発生する可能性のある不整合(つまり、不明なタイプのプロパティ)に対処することをお勧めします。

于 2012-08-12T12:53:45.943 に答える