VİEW (SANAL TABLO) 1. View Nedir? 2. View ler ile Çalışmak 3. View Oluşturmanın Yararları Veri güvenliği; Birim dönüştürmeleri;

Benzer belgeler
Elbistan Meslek Yüksek Okulu GÜZ Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU

Veri tabanı içinde bulunan tablolardakibazı sütunlarda bulunan bilgilerin, herkes tarafından görülmesi istenmeyebilir.

Bölüm 4: DDL Veri Tanımlama Dili

Veritabanına Uygulanması

VERİTABANI. SQL (Structured Query Language)

SQL'e Giriş. SELECT Deyimi. SQL Komutları. Yardımcı Deyimler

5 SQL- Yapısal Sorgulama Dili. Veritabanı 1

SQL Komutları (2) Uzm. Murat YAZICI

SQL veri tabalarına erişmek ve onları kullanmak için geliştirilmiş bir lisandır.

Oracle da kullanılan veri tipleri:

8 Oracle da tablo yapısı içinde otomatik artan kolon yoktur. (identity kolon

SORGULAR VE ÇEŞİTLERİ II

BİLİŞİM TEKNOLOJİLERİ

SORGULAR. Öğr.Gör.Volkan Altıntaş

VERĐTABANI YÖNETĐM SĐSTEMLERĐ

VERİTABANI Veritabanı Yönetimi

SQL Deyimleri. Öğr.Gör.Volkan ALTINTAŞ Volkanaltintas.com

BÖLÜM -7: TABLOLARI OLUŞTURMA VE YÖNETME

Veritabanı sistemlerinde veri bütünlüğünü sağlayabilmek için CONSTRAINTS olarak adlandırılan bazı zorlayıcı ifadeler kullanılabilir.

Veri Tabanı Programlamaya Giriş

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır.

BÖLÜM- 8: DİĞER ŞEMA NESNELERİNİ OLUŞTURMA

Elbistan Meslek Yüksek Okulu GÜZ Yarıyılı Ara Öğr. Gör. Murat KEÇECĠOĞLU

EBE-368 Veri Tabanı Yönetim Sistemleri İlişkisel Model (The Relational Model)

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim'

Tablolar Arası İlşikiler ve Alan Özellikleri Siparis.musteri_no musteri.musteri_no Siparis.urun_kodu musteri.urun_kodu

SQL e Giriş. Uzm. Murat YAZICI

Tablolar Arası İlşikiler ve Alan Özellikleri. Şekil 1. Magaza veritabanının tabloları ve tablolar arasındaki ilişkiler

YAPISAL SORGULAMA DİLİ (SQL)

SQL'e Giriş. SELECT Deyimi. SQL Komutları. 1. DDL (Data Definition Language - Veri Tanımlama Dili)

Veri Tabanı Hafta Dersi

İNTERNET PROGRAMCILIĞI HAFTA. MYSQL ile VERİTABANI İŞLEMLERİ - 1. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Veritabanı Oluşturma, Silme

«BM364» Veritabanı Uygulamaları

Veritabanı Yönetim Sistemleri (Veritabanı Tasarımı) SQL (Structured Query Language)

Data Programming SQL Language. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

VERİ TABANI YÖNETİM SİSTEMLERİ I

3. Hafta Tablo İşlemleri BPR255 Veritabanı. Bu Derste Öğrenecekleriniz: 1. Tablo İşlemleri Kısıtlamalar (Constraints)

Yukarıdakilerden hangileri DML (Data Manipulation Language) ile gerçekleştirilir?

COMMIT: Oluşturulan transaction işlemi başarılı bir şekilde gerçekleştiğinde yapılan değişikliklerin veritabanına kalıcı olarak aktarılmasıdır.

Veri Tabanı SQL Server ve Management Studio kurulum linkleri:

VERİ TABANI YÖNETİM SİSTEMLERİ

T.C GAZİ ÜNİVERSİTESİ BİLİŞİM ENSTİTÜSÜ YÖNETİM BİLİŞİM SİSTEMLERİ ANA BİLİM DALI MS SQL KOMUTLARI VE MS SQL KOMUTLARI İLE İLGİLİ UYGULAMALAR

Veritabanı Tasarımı. Kullanıcı Erişimini Kontrol Etme

TEMEL SQL SORGU ÖRNEKLERİ. Yukarıdaki sorguyu yazıp çalıştırdığımızda db_market adında bir veritabanı oluşturulur.

Veritabanı Tasarımı. Tablo Oluşturma

Tavsiye Edilen Önhazırlık Temel SQL Server 2000 bilgisi edinmek.

Veri Bütünlüğü ve Constraint ler. Veritabanı 1

TRIGGER. Trigger lar, tablo üzerinde tanımlanabilen ve bu tablo üzerinde bir işlem gerçekleştiğinde tetiklenen programlama ögeleridir.

Veritabanı Tasarımı. NOT NULL ve UNIQUE Kısıtlamaları Tanımlama

3. Hafta Tablo İşlemleri BPR255 Veritabanı Yönetim. Bu Derste Öğrenecekleriniz: 1. Tablo İşlemleri

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

İNTERNET PROGRAMLAMA 2 A S P. N E T. Marmara Teknik Bilimler MYO / Hafta 5 Veri Tabanı İşlemleri

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim'

İLERİ VERİTABANI SİSTEMLERİ SUAT ÜSTKAN

Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü Veri Tabanı ve Yönetimi (BİL 301)

Veritabanı Tasarımı. Sütun Değerlerini Güncelleme ve Satırları Silme

SQL Kod ile Tablo Oluşturma

Mysql Veritabanı Komutları

SAKLI YORDAM (Stored Procedure) Sibel Somyürek

Genel Kavramlar. Bilgisayar ortamında işlenebilecek durumda bulunan kayıtlar. Birbiri ile ilişkili veriler topluluğu ve veriler arası ilişkiler

BMB202. Veritabanı Yönetimi Ders 5. İlişkisel Cebir ve SQL. Erdinç Uzun NKÜ Çorlu Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

SUNGURLU MESLEK YÜKSEKOKULU 5. T-SQL

BÖLÜM- 9: KULLANICI ERİŞİMLERİNİ YÖNETMEK

ELIF KIOTZEOGLOU RESUL MURAD MERT PACOLARI

SQL sorguları çalıştırıldığında veriler tablo üzerinden iki yöntemle alınır.

Fonksiyonlar istenilen deger tipinde dönüs yapabilir. INT, VARCHAR deger döndürebileceğiniz gibi bir tablo da döndürebilirsiniz.

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

Veritabanı Tasarımı. DML İşlemleri ve Görünümler

YAPISAL SORGULAMA DİLİ. BARIŞ ARIBURNU barisariburnu.com

-- işareti tek satırlık açıklamalarda kullanılır. Açıklama olarak yazılan satırın önüne konulması yeterlidir.

Yaptığımız web sitelerinin daha kullanışlı olması için veritabanı sistemleri ile bağlantı kurup ihtiyaca göre verileri okuyup yazmasını isteriz.

KULLANICI TANIMLI FONKSİYONLAR

Durhan GABRALI Veritabanı Organizasyonu Dersi (11B)

SQL'e Giriş 2. CREATE TABLE tabloadı (kolon isimleri ve veri türleri) (BOLUM_NO NUMBER, BOLUM_ADI CHAR(10));

Aşağıdaki tabloyu inceleyin. Sorgulama işlemlerini bu tabloya göre yapacağız.

1 Temel Kavramlar. Veritabanı 1

10-Veri Tabanları.

Veritabanı Tasarımı. İndeksler ve Eşanlamlar

Veritabanı Tasarımı. Kartezyen Çarpım ve Join İşlemleri

20461C Querying Microsoft SQL Server Modül Seviye Belirleme Testi

DAO İLE SQL KOMUTLARI. Sql komutlarını artık veri tabanında kullanmaktan başka çaremiz yok arkadaşlar. Şimdi bu sql derslerimize başlayalım.

Birden Çok Tabloda Sorgulama (Join)

Kullanıcı tanımlı fonksiyonlar SQL2000 ile gelen özelliklerden biridir. Fonksiyonlar tek bir değer veya tablo döndürmek için kullanılır.

1 Temel Kavramlar. Veritabanı 1

VERİTABANI ORGANİZASYONU

SQL (Structured Query Language)

Sorgudan elde edilen değerin değişkenlere aktarılmasını sağlar. Sorgudan tek satır dönmesi gerekir. Çok satır dönerse hata verir.

Veri Tabanı II Alt Sorgular

SUNGURLU MESLEK YÜKSEKOKULU 5. T-SQL-2

Veri Tabanı Yönetim Sistemleri Bölüm - 4

KULLANICI TANIMLI FONKSİYONLAR (Devam)

Veritabanı. SQL (Structured Query Language)

VERİTABANI ve YÖNETİMİ

KISITLAMALAR (CONSTRAINT)

DML işlemleri. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı May Öğr. Gör. Murat KEÇECĠOĞLU

Aşağıdaki tabloyu inceleyin. Yeni kayıt girme, var olan bir kaydı silme veya güncelleme işlemlerini bu tabloya göre yapacağız.

Veritabanı Tasarımı. Tablo Değiştirme

VERİ TABANI UYGULAMALARI

VERİ TABANI ve YÖNETİMİ

Transkript:

VİEW (SANAL TABLO) 1. View Nedir? View ler, sorguları basitleştirmek, erişim izinlerini düzenlemek, farklı sunuculardaki eşdeğer verileri karşılaştırmak veya bazı durumlarda sorgu süresini kısaltmak için kullanılan, gerçekte olmayan, SELECT ifadeleriyle tanımlanmış sanal tablolardır. SQL işleminde birden fazla tablo ve onların farklı farklı kolonları kullanılacaksa, hepsini birleştirmek, gerekli tablodan sorgu yapmak biraz zahmetli bir iş olabilir. Bunun yerine view denen sanal tablolardan oluşturup, gerekli kolonları farklı tablolardan alıp sorguları tek bir tablo üzerinden yapmak işleri kolaylaştırabilir. Karmaşık sorgular kolay bir hale gelmiş olur. Ayrıca view kullanmanın çok önemli nedenlerinden bir tanesi sağladığı güveliklerdir. Tabloların tamamının görünmesi istenilmediği zamanlarda sanal tablo kullanıp görünmesini engelleyebilirsiniz. View ler üzerinde yapılan değişikler, kendilerini oluşturan kaynak tabloları da etkiler, aynı değişiklikler kaynak tablolara da yansır. Çeşitli kısıtlar altında yeni kayıt eklenebilir, kayıt silinebilir, güncelleme yapılabilir. 2. View ler ile Çalışmak View ler kaydedilmiş sorgulardan ibarettir. Aslında tablo gibi kullanılsa da böyle bir tablo gerçekte yoktur. Ancak view ler, SELECT FROM dan sonra adı verilerek bir tabloymuş gibi sorgulanabilir. Bir view in verileri çektiği gerçek tabloya temel tablo (base table) denir. Bir view temel tablonun bütün sütunlarını veya bazı sütunlarını veya bazı satırlarını kapsayabileceği gibi bazen birden fazla temel tablo üzerinde tanımlanmış bir view de olabilir. Bunun yanı sıra SQL Server de view lerin tablolara dayalı olması da zorunluluk değildir. View, başka bir view üzerine de tanımlanabilir. 3. View Oluşturmanın Yararları Veri güvenliği; Veri tabanı içinde bulunan tablolardaki bazı sütunlarda veya satırlarda bulunan bilgilerin, herkes tarafından görülmesi istenmeyebilir. Örneğin, personelin maaşlarının herkes tarafından listelenebilir olması mahsurlu olabilir. Bu durumda, Personel adlı temel (base) tablodan, vw_pers adlı bir view oluşturulabilir. Bu view e maaş sütunu dâhil edilmez. Vw_pers adlı view, herkesin kullanımına açık, Personel adlı tablo ise, yetkili kişiler dışındakilere erişilemez hale getirilirse, maaşların herkes tarafından erişilebilir bilgi olması önlenmiş olur. Birim dönüştürmeleri; Kullanıcıların çeşitli birim dönüşümlerinden geçmiş değerler görmesi gerektiğinde view kullanılabilir.

Örneğin satışı yapılan ürünlerin saklandığı tabloda uzunluk ile ilgili bir sütun olduğunu varsayalım. Bu sütunun bazı kullanıcılar için inch cinsinden bazı kullanıcılar için cm cinsinden görünmesini istendiğinde farklı view ler kullanılabilir. Verilerin farklı bir tablo formatında sunulması; Bazı durumlarda normalizasyon ile tasarladığımız tablolar çok karışık olabilir. Kullanıcıların tabloları daha basit bir formatta görmesi gerektiğinde, birden fazla temel tablodan oluşan bir view işe yarayacaktır. Çok karmaşık sorguları basitleştirmek; Karmaşık sorgulamalar, VIEW özelliği kullanılarak daha basit hale getirilebilir. Örneğin; karmaşık SELECT komutu içinde, sonucu kullanılacak başka bir SELECT komutu kullanmak yerine, bu sonucu bir view olarak isimlendirerek, view adını kullanmak işi basitleştirebilir. Bazı durumlarda ise, işletmenin veri tabanı uygulamasında çok sık olarak sorulan karmaşık soruları bir view yapısı içinde saklayarak, daha sonra aynı tip sorgulamalar için bu view yapısını kullanarak daha basit ifadeler kullanmakta olasıdır. 4. View ler nasıl oluşturulur? Genel olarak bir view en basit şekilde aşağıdaki gibi oluşturulur; CREATE VIEW viewadi SELECT sütun_adlari FROM tabloadi View adlarının vw_ ile başlaması tavsiye olunur, böylece veri tabanınıza yeni bakan biri onun bir view olduğunu kolayca anlayabilir. View lerde sütun adlar, özellikle belirtilmediği sürece temel tablodaki sütun adları ile aynı olur. Yine view lerde sütunların veri tipi belirtilmez, çünkü SELECT ifadesini takip eden sütunların tipi ile aynıdır. View tanımındaki SELECT ifadesi, ORDER BY, COMPUTE ve COMPUTE BY yan cümlelerini almazlar.

5. View leri Yönetmek 5.1. View Üstünde Değişiklik Yapmak Bir view üzerinde değişiklik yapmak için ALTER deyimi aşağıdaki şeklide kullanılır. ALTER VIEW viewadi WITH secenekler SELECT sütun_adlari FROM tabloadi 5.2. Tanımlı view leri görmek ve sistem view leri Bir veritabanında hangi view lerin tanımlanmış olduğu görülmek istendiğinde genellikle sistem view lerinden yararlanılır. Sistem view veya şemaları master veritabanında bulunur ve ANSI standartlarında tanımlanmış olduğundan birçok diğer VTYS de aynı isimle bulunabilir. Sistem Şeması information_schema.tables information_schema.view_table_usage information_schema.views İşlevi Veritabanında tanımlı view lerin bir listesini içerir. Temel tablo olarak sysobjects i kullanır. Hangi tablolar üzerinde view tanımlı olduğunu gösterir. sysdepends tablosunu kullanır. Tanımlı view lerin adı ve kaynak kodu gibi özelliklerini tutar. syscomments ve sysobjects ten veri çeker. Tablo 1. View ler hakkında bilgi içeren sistem şemalarından bazıları Bütün view lerin kaynak kodunu görmek için; SELECT * FROM INFORMATİON_SCHEMA.VIEWS Herhangi bir view in syscomments tablosunda yer alan tanımını okuyabilmek için; SP_HELPTEXT view_ismi View lerin listesini almak için; SELECT * FROM sys.views 5.3. View leri Silmek View leri silmek için şu komut kullanılır. DROP VIEW viewadi

5.4. View Tanımlarını Gizlemek Bazı durumlarda, view leri oluşturan kaynak kodlarımızın başkaları tarafından görülmesini istemeyiz. Bu durumlarda, SQL Server kaynak kodları şifreleyebilir. Ancak şifrelenmiş bir view in kaynak koduna biz de dâhil hiç kimsenin ulaşamayacağını gözden kaçırmamak lazım. Bu nedenle şifrelemeden önce bir kopyasını kaydederek doğacak aksaklıkların önüne geçebiliriz. View leri şifrelemek için ENCYRIPTION operatörü kullanılır. Bir view, ilk oluşturulma anında şifrelenebileceği gibi daha sonradan da şifreli hale getirilebilir. Kaynak kodu şifrelenmiş bir view oluşturmak için; CREATE VIEW viewadi WITH ENCRYPTION SELECT sütun_adlari FROM tabloadi 5.5. Temel Tabloların Şemasını Kilitlemek: SCHEMABINDING SCHEMABINDING operatörünün görevi, view e ait temel tabloların şemalarında değişiklik yapılmayacağına dair bir kilitleme yapmaktır. Bu operatör view in tanımında olduğu sürece, view e ait temel tablolar üzerinde bir sütun silinemez veya türü değiştirilemez. Şemada bir değişiklik yapabilmek için, ya SCHEMABINDING seçeneğinin tanımdan çıkarılması ya da view in tamamen silinmesi gereklidir. Bir view üzerinde, Unique Clustered Index tanımlayabilmek için view in SCHEMABINDING ile tanımlanmış olması gereklidir. SCHEMABINDING seçeneğinin seçili olabilmesi için view in tanımında yer alan temel tabloların isimlerinin sahip.tabloadı şeklinde yazılmış olması gerekmektedir. CREATE VIEW vw_cokugrastim WITH SCHEMABINDING -- tablolarda bir değişiklik yapılamıyor SELECT ad, soyad, sehir FROM dbo.musteri -- dbo. Olmalı (tablonun sahibi) DROP TABLE musteri --yazıldığında hata verir HATA: Could not drop object 'musteri' because it is referenced by a FOREIGN KEY constraint.

5.6. View ler ve INSERT, UPDATE, DELETE ifadeleri Bir view gerçekte bir tablo olmasa da veri seçmenin yanı sıra veri güncelleme, silme ve ekleme amaçlı da kullanılabilir. View ler bünyesinde veri tutmadıklarından ilgili değişiklikleri doğrudan temel tablo üzerinde gerçekleştirirler. View ler gerçek bir tablo olmadığından dolayı, veri değişikliği yapılırken bazı kısıtlamalar vardır. Bunlar; Bir view aynı anda sadece tek bir tablo üzerinde veri değiştirebilir. Birden fazla tablodan kayıt çeken view ler üzerinde veri değişikliği yapılacaksa, aynı anda tek bir tablo etkilenecek şekilde parçalara ayrılmalıdır. Bir view in temel tablosu üzerinde değişiklik yapılabilmesi için, Constraint ve Indeks lere takılmaması gerekir. Temel tablomuzda NULL olamayan sütunlar varsa ve bu sütunlar view de yer almıyorsa veri ekleme işleminde hata meydana gelecektir. WHERE ifadesi ile filtrelenmiş bir view de UPDATE cümleciği ile filtre dışına çıkma olasılığı vardır. Aynı şekilde bir view in seçemeyeceği bir kaydın eklenmesi olasılığı da vardır. Bu türden bir durumunu önüne geçebilmek için view in CHECK OPTION operatörü ile oluşturulması gerekir. CHECK OPTION, verilerin güvenliği açısından da koruma sağlayacaktır. Böylece WHERE koşulu muhafaza edilmiş olur ve WHERE koşulu dışındaki INSERT ve UPDATE işlemleri yapılmaz, hata verir. CREATE VIEW vw_ilk_harfi_a_olan_musteriler SELECT adi,soyadi FROM musteri WHERE adi LIKE 'a%' WITH CHECK OPTION Yukarıda oluşturulan vw_ilk_harfi_a_olan_musteriler isimli view e aşağıdaki eklenme yapılmak istendiğinde hata verir. INSERT INTO vw_ilk_harfi_a_ile_baslayan_musteriler VALUES ('Fatma', 'Kılınç ) HATA: The attempted insert or update failed because the target view either specifies WITH CHECK OPTION or spans a view that specifies WITH CHECK OPTION and one or more rows resulting from the operation did not qualify under the CHECK OPTION constraint. (with check option dan dolayı 'a' ile başlamayan bir ekleme yapılamaz)

6. Parçalı View Yapıları Parçalı view ler birden fazla eş tablodan veri çekip bir tabloymuş gibi gösteren view lerdir. Örneğin birden fazla şubesi olan bir mağazanın farklı şubelerinden birinde SQL Server, diğerinde Access, bir diğerinde Oracle gibi farklı veri tabanları kullanılabilir. Bunlarda yer alan satış verilerini bir araya getirip incelemek istendiğinde, parçalı view ler etkin bir çözümdür. Bir diğer kullanım alanı ise, çok fazla miktarda veri içeren tabloları yataylaştırmaktır. Örneğin 30 milyon abonesi olan bir telefon şirketini ele alalım. Tek bir tabloda 30 milyon kaydı saklarken diske sığmama, raporlama işlemlerinin yavaş yapılması gibi problemler yaşanıyorsa alan koduna göre farklı tablolara ayrılabilir. Böylece tablo sayısı artacaktır ama her tablodaki kayıt sayısı azalacaktır. Parçalı View oluşturmak için aşağıdaki genel ifade kullanılır. CREATE VIEW view_adi WITH secenekler SELECT. UNION ALL SELECT Örnek: İki veya daha fazla şubede çalışmak üzere, sipariş takip sistemi geliştirdiğimizi varsayalım. Urun tablosu aşağıdaki gibi olsun. CREATE TABLE sube1urun ( Subekod INT NOT NULL Urunkod INT, Urunad VARCHAR(50), PRIMARY KEY ( SubeKod, Urunkod ) CHECK (Subekod = 1 ) ) CREATE TABLE sube2urun ( Subekod INT NOT NULL Urunkod INT, Urunad VARCHAR(50), PRIMARY KEY ( SubeKod, Urunkod ) CHECK (Subekod = 2 ) ) INSERT INTO sube1urun ( Subekod, Urunkod, Urunad ) VALUES (1,1, Staj Defteri )

INSERT INTO sube1urun ( Subekod, Urunkod, Urunad ) VALUES (1,2, Elbise Askısı ) INSERT INTO sube2urun ( Subekod, Urunkod, Urunad ) VALUES (2,1, Staj Defteri ) INSERT INTO sube2urun ( Subekod, Urunkod, Urunad ) VALUES (2,3, Kravat ) Merkez ofiste, Genel Müdürün bütün şubelerdeki ürünlere göz atabilmesi için, bir parçalı view oluşturalım. CREATE VIEW pw_merkez_sube SELECT * FROM sube1urun UNION ALL SELECT * FROM sube2urun Bu view in neleri kapsadığını görmek için, SELECT * FROM pw_merkezsube Daha sonra, view üzerinden üç yeni ürün ekleyelim. INSERT INTO pw_merkez_sube ( Subekod, Urun, Urunad ) VALUES (1,4, Pergel Takımı ) INSERT INTO pw_merkez_sube ( Subekod, Urun, Urunad ) VALUES (2,4, Pergel Takımı ) INSERT INTO pw_merkez_sube ( Subekod, Urun, Urunad ) VALUES (2,5, Kıl Testere ) Daha sonra her iki tablodaki kayıtları kontrol edelim. SELECT * FROM sube1urun SELECT * FROM sube2urun İlk kaydın birinci tabloya, diğer iki kaydın ikinci tabloya eklendiğini görürüz. Burada subekod sütununa parçalayıcı sütun adı verilir. Bu sütunu SQL Server açısından parçalayıcı sütun yapan şey, üstünde tanımlı olan CHECK constraint tir.

7. Nesnelere Takma İsimler Vermek ( Synonymus ) Bir nesneye kalıcı olarak başka bir isim ile veritabanı seviyesinde isimlendirmek gerekirse SYNONYM lerden yararlanılabilir. Synonym oluşturmak için için aşağıdaki genel ifade kullanılır. CREATE SYNONYM synonym_ismi FOR nesne