2016-03-26 20 views
0

Ben mysql veritabanında Aşağıdaki tablolarda:dayalı bir değer eklemek için bir tetikleyici kullanın yabancı anahtar

madde

Column    Type   Null Default Links to Comments MIME 
item_id (Primary) int(11)   No    
FK_item_category int(11)   Yes NULL item_category -> item_category_id  
item_name   varchar(45)  Yes NULL   
item_description varchar(45)  Yes NULL   
item_price   decimal(5,2) Yes NULL   

item_category

Column      Type  Null Default Links to Comments MIME 
item_category_id (Primary) int(11)  No    
item_category_name   varchar(45) Yes  NULL  

sipariş

Column    Type   Null Default   Links to Comments MIME 
order_id (Primary) int(11)   No    
FK_order_user_email varchar(45)  Yes  NULL    user -> user_email   
order_time   datetime  Yes  CURRENT_TIMESTAMP   
order_pickup_time time(6)   Yes  NULL    
order_instructions varchar(45)  Yes  NULL    
order_gross_total decimal(10,2) Yes  NULL    
order_net_total  decimal(10,2) Yes  NULL  

order_detail

Diğer tablolarım da var, ancak özellikle bu tablolarda bir tetikleyici oluşturmaya çalışıyorum.

dış anahtar dayalı order_detail masaya ITEM_PRICE katacak bir tetikleyici oluşturmak çalışıyorum fk_order_item_id. Tetik takıldıktan sonra ve güncelleme sonrasında çalıştırılacaktır.

Herhangi bir yardım çok takdir edilecektir. Teşekkürler

+0

İlginç bir proje gibi geliyor, bir sorunuz varsa bize bildirin! – Shadow

+0

Tetikleyicileriniz şimdiki gibi görünüyor mu? Ne kadar iyi çalışıyorlar? –

+0

@BobDalgleish Çalışmayı tetikleyemedim. ** order_detail_unit_price ** sütununu güncellemek için bir sorguyu (iç birleştirme ile) kullanabildim, ancak otomatik hale getirilmeye ihtiyacım var, böylece yeni bir sipariş detayı oluşturulduğunda veya düzenlendiğinde bir fiyat eklenir. 'UPDATE order_detail INNER JOIN öğe AÇIK FK_order_item_id = item.item_id SET' order_detail_unit_price' = item.item_price WHERE item.item_price NULL değil –

cevap

0

Bu şekilde tetikleyiciler kullanmamanızı öneririz. Bir uygulama servisinin, masalarınızı güncellemek için doğru yer olduğunu düşünüyorum. Veritabanında olması gerekiyorsa, saklı bir prosedürün kullanımını düşünün. Bu tabloların güvenliğini nasıl yapacağınızı düşünmelisiniz. Saklı yordamın kullanılması yararlı olabilir, çünkü bir kullanıcı için prosedüre haklar verebilirsiniz, ancak tablolara izin veremezsiniz.

Tetikleyiciler, belirli kriterleri yerleştirmeden veya kontrol etmeden önce hesaplama yapmak için kullanılabilir.

Uygulamanızdaki bir hizmetin, sorununuz için en iyi çözüm olduğuna inanıyorum. Güncellemeleri ve güvenliği ele almalı. Durumunuzda birden fazla hizmet gerektirebilir. Sipariş oluşturduktan sonra, sipariş verildikten sonra güncellenmesi için bir tane olabilir. Belki bir sipariş silmek için başka, vb ...

İlgili konular