Tabelle prices - not null und unique auf parts_id und partsgroup_id
authorG. Richardson <information@kivitendo-premium.de>
Sun, 7 Aug 2016 20:48:09 +0000 (22:48 +0200)
committerG. Richardson <information@kivitendo-premium.de>
Tue, 22 Nov 2016 13:42:49 +0000 (14:42 +0100)
SL/DB/MetaSetup/Price.pm
sql/Pg-upgrade2/prices_unique.sql [new file with mode: 0644]

index 29c0de3..a0c2639 100644 (file)
@@ -10,13 +10,15 @@ __PACKAGE__->meta->table('prices');
 
 __PACKAGE__->meta->columns(
   id            => { type => 'serial', not_null => 1 },
-  parts_id      => { type => 'integer' },
+  parts_id      => { type => 'integer', not_null => 1 },
   price         => { type => 'numeric', precision => 15, scale => 5 },
-  pricegroup_id => { type => 'integer' },
+  pricegroup_id => { type => 'integer', not_null => 1 },
 );
 
 __PACKAGE__->meta->primary_key_columns([ 'id' ]);
 
+__PACKAGE__->meta->unique_keys([ 'parts_id', 'pricegroup_id' ]);
+
 __PACKAGE__->meta->foreign_keys(
   parts => {
     class       => 'SL::DB::Part',
diff --git a/sql/Pg-upgrade2/prices_unique.sql b/sql/Pg-upgrade2/prices_unique.sql
new file mode 100644 (file)
index 0000000..f086283
--- /dev/null
@@ -0,0 +1,9 @@
+-- @tag: prices_unique
+-- @description: DB-Constraint - nur ein Preis pro Artikel pro Preisgruppe
+-- @depends: release_3_4_1
+
+-- it would be easier to just have a composite primary key on parts_id and
+-- pricegroup_id, but that would need some code refactoring
+ALTER TABLE prices ADD CONSTRAINT parts_id_pricegroup_id_unique UNIQUE (parts_id, pricegroup_id);
+ALTER TABLE prices ALTER COLUMN parts_id SET NOT NULL;
+ALTER TABLE prices ALTER COLUMN pricegroup_id SET NOT NULL;